--[[
    函数：lua_success_activity_r
    功能：更新锁记录为成功
    参数：ARGV[1]:r_id，字符串
    参数：ARGV[2]:user_id，字符串
    返回：0表示成功，1表示不存在场次或商品，2表示用户未加锁
--]]

-- 秒杀场次的key的前缀
local PREFIX_ACTIVITY_A = "activity_a_"
-- 秒杀项目的key的前缀
local PREFIX_ACTIVITY_R = "activity_r_"
-- 秒杀锁的key的前缀
local PREFIX_ACTIVITY_L = "activity_l_"
-- key的连接符号
local PREFIX_C = "_"
-- key的连接符号
local PREFIX_S = "*"


-- 查找秒杀项目
local key = PREFIX_ACTIVITY_R..PREFIX_S..PREFIX_C..ARGV[1]
local r_keys = redis.call('keys',key)
local len = #r_keys
if(len~=1)
then
    return 1
end

-- 秒杀场次id
local r_key = r_keys[1]
local act_id = redis.call('hget',r_key,'act_id')

-- 遍历锁
local l_key = PREFIX_ACTIVITY_L..act_id..PREFIX_C..ARGV[1]..PREFIX_C..PREFIX_S
local l_keys = redis.call('keys',l_key)
local l_len = #l_keys
if(l_len==0)
then
    return 2
end

for i= 0, l_len-1 do
    -- 只检测success为0的锁
    local l_key_2 = l_keys[i+1]
    local locks = redis.call('hmget', l_key_2 ,'user_id','success')
    local success = tonumber(locks[2]) or 0
    if(success==0 )
    then
        -- 如果发现用户正在秒杀中，则更新之
        local user_id2 = locks[1]
        if(user_id2==ARGV[2])
        then
            redis.call('hset', l_key_2,'success',1)

            -- 退出
            return 0
        end
    end
end


return 2